package c04流程控制和数组;

/**
 * Java7之前，switch只能匹配除long以外的整型：byte,short,char,int；
 * Java7之后，能匹配的整形不变，还可以匹配字符串、枚举！
 * 前后都不能匹配boolean型！
 * switch(k)，k可以是常量和变量；case(v)，v只能是直接量！
 *
 * @author 炜sama
 */
public class Java7的switch {

	public static enum KV {v0, v1}

	;

	public static void main(String[] args) {
//		boolean k=false,v0=true,v1=false;//错误！
		final byte k = 0, v0 = 0, v1 = 1;
//		final short k=0,v0=0,v1=1;
//		final char k='a',v0='a',v1='b';
//		final int k=0,v0=0,v1=1;
//		final long k=0,v0=0,v1=1;//错误！
//		final String k="s0",v0="s0",v1="s1";
//		final KV k=KV.v0,v0=KV.v0,v1=KV.v1;

		//如果使用下面这种写法，则会编译出错！因为b1,b2是普通变量，使k,v0,v1不能在编译时确定，不能成为宏变量，
		//即直接量。而case后要求必须是直接量，所以编译出错。若把b1、b2改成final型，则可以正常编译！
//		byte b1=1,b2=2;
//		final byte k=b1,v0=b1,v1=b2;

		switch (k) {
			case v0:
				System.err.println("k=" + v0);
				break;
			case v1:
				System.err.println("k=" + v1);
				break;
			default:
				break;
		}


		int s = 0;
		switch (s) {
			case 0:
			case 1:
			case 2:
				System.err.println(2);
				break;

			default:
				System.err.println("default");
				break;
		}

	}

}
